Digital graphic design, image editing, and video editing applications (hereafter collectively referred to as “client” applications) provide graphical designers, media artists, and other users with the necessary tools to create a variety of media content. Examples of such applications include Final Cut Pro® and iMovie®, both sold by Apple® Inc. Applications such as these give users the ability to generate 2D and 3D computer graphics and computer animations, as well as to edit, combine, transition, overlay, and piece together different media content in a variety of manners to create a resulting media project. The resulting media project specifies a combination of audio and/or video content that is used to create a media presentation.
The media presentation may be rendered using various resources in order to produce the final video output. Different systems may include different rendering hardware. In some cases, one or more graphics processing units (“GPU”) may be used to render the media presentation, while in other cases one or more central processing units (“CPU”) may be used to render the media composition. In addition, some applications may use a combination of one or more GPUs and one or more CPUs (and/or multi-core CPUs) to render the media presentation.
The various available GPUs and/or CPUs may each execute different formats of computer code. In addition, different CPUs and GPUs have different capabilities and limitations. For these reasons, code developers may have to spend a substantial amount of time manually translating code to run on different platforms, optimizing the code for efficient performance on the different platforms, and/or generating various support functions and parameters needed by the different platforms.
Thus, there is a need for a flexible and extendable image processing framework capable of receiving various formats of input code and producing an output that can be run on multiple platforms while delivering optimal performance on a variety of rendering resources.